package com.pawernode.service;

import com.pawernode.config.MyConfirmCallBack;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct; // 在容器启动的时候执行，相当于初始化作用
import javax.annotation.Resource;
import java.util.Date;

/**
 * 消息服务类，负责发送消息到RabbitMQ
 */
@Service
@Slf4j
public class MessageService {

    // 注入RabbitTemplate模板类，用于发送消息
    @Resource
    private RabbitTemplate rabbitTemplate;

    // 注入自定义的确认回调接口实现类
    @Resource
    private MyConfirmCallBack myConfirmCallBack;

    /**
     * 初始化方法，设置RabbitTemplate的确认回调
     */
    @PostConstruct // 在容器启动的时候执行，相当于初始化作用
    public void init() {
        rabbitTemplate.setConfirmCallback(myConfirmCallBack);
    }

    /**
     * 发送消息到RabbitMQ
     */
    public void sendMsg() {
        // 构建消息对象
        Message message = MessageBuilder.withBody("hello rabbitmq".getBytes()).build();

        // 创建关联数据对象，用于标识消息
        CorrelationData correlationData = new CorrelationData();
        correlationData.setId("order_123456"); // 发送订单信息

        // 发送消息
        rabbitTemplate.convertAndSend("exchange.confirm.1", "info", message,correlationData);

        // 记录日志
        log.info("消息发送完毕，发送时间为：{}", new Date());
    }
}
